package com.iceclean.service;

import com.iceclean.po.Post;
import com.iceclean.po.PostBar;
import com.iceclean.po.PostBarFollow;

import java.util.List;

/**
 * @author : Ice'Clean
 * @date : 2021-05-04
 *
 * 贴吧服务接口
 */
public interface PostBarService {
    /**
     * 通过贴吧 id 寻找贴吧
     * @param postBarId 贴吧 id
     * @return 贴吧实体
     */
    PostBar findPostBarById(int postBarId);

    /**
     * 通过贴吧名寻找贴吧
     * @param postBarName 贴吧名
     * @return 贴吧实体
     */
    PostBar findPostBarByName(String postBarName);

    /**
     * 通过页数寻找贴吧，区分查看贴吧和审核贴吧
     * @param check 系统管理员的审查标志，为 1 表示正在审核，只显示未审核的贴吧
     * @param page 页数
     * @param num 每页的数目
     * @return 符合条件的贴吧
     */
    List<PostBar> findPostBarsByPage(int check, int page, int num);

    /**
     * 通过页数获取指定用户创建的贴吧
     * @param userId 用户 id
     * @param page 页数
     * @param num 每页的数目
     * @return 贴吧实体
     */
    List<PostBar> findUserPostBarByPage(int userId, int page, int num);

    /**
     * 通过页数和搜索字段查询指定贴吧（模糊搜索）
     * @param search 搜索字段
     * @param page 页数
     * @param num 每页的数目
     * @return 符合条件的贴吧集合
     */
    List<PostBar> searchPostBarByPage(String search, int page, int num);

    /**
     * 获取搜索到的贴吧总数
     * @param search 搜索字段
     * @return 以该字段在贴吧内搜索到的贴子总数
     */
    int getAllSearchForNumber(String search);

    /**
     * 通过页数寻找指定用户关注的贴吧
     * @param userId 指定用户的 id
     * @param page 页数
     * @param num 每页的数目
     * @return 符合条件的贴吧集合
     */
    List<PostBar> findPostBarFollowByPage(int userId, int page, int num);

    /**
     * 获取所有贴吧的数目
     * @param check 是否在审核，1 表示在审核，返回未审核的贴吧，否则反之
     * @return 所有贴吧数
     */
    int getNumberOfAllPostBar(int check);

    /**
     * 创建新贴吧
     * @param userId 创建者 id
     * @param postBarName 新贴吧名称
     * @param postBarResume 新贴吧简介
     * @return 新贴吧实体
     */
    PostBar createPostBar(int userId, String postBarName, String postBarResume);

    /**
     * 改变贴吧关注状态（未关注则新建贴吧关注，已关注则取消贴吧关注）
     * @param postBarId 受处理的贴吧 id
     * @param userId 处理的用户 id
     * @return 新收藏的实例对象，取消收藏则返回 null
     */
    PostBarFollow changePostBarFollow(Integer postBarId, Integer userId);

    /**
     * 判断用户是否关注过指定贴吧
     * @param postBarId 贴吧 id
     * @param userId 用户 id
     * @return 已关注返回 true，否则 false
     */
    boolean isUserFollowPostBar(Integer postBarId, Integer userId);

    /**
     * 同意创建贴吧服务
     * @param postBarId 审核通过的贴吧 id
     * @return 是否操作成功
     */
    boolean agreeCreatePostBar(int postBarId);

    /**
     * 根据贴吧 id 删除贴吧
     * @param postBarId 贴吧 id
     * @return 是否删除成功
     */
    boolean deletePostBar(int postBarId);
}
